using System;
using System.ComponentModel;
using System.Data;
using System.Drawing;
//using System.Xml.Linq;
using System.Windows.Forms;
//using System.Linq;
//using Utiles.UtilInfragistics;
using Infragistics.Win;
using Infragistics.Win.UltraWinGrid;
//using clsVariables;
//using clsBBDD;
using Utiles;
using Alias_ActiveReports = DataDynamics.ActiveReports;
using Alias_UltraWinGrid = Infragistics.Win.UltraWinGrid;
//using Utiles.General;
//
//
#region  Notas
//SC: MEjor lo hago por BBDD
//#Region "                                                               bol_MostrarExportacionExcel"
//Private p_bol_MostrarExportacionExcel As Boolean = False
//<Category(clsVariables.str_NombreAplicacion), Description("Mostrar la opción de exportar Excel")> _
//Public Property bol_MostrarExportacionExcel() As Boolean
//   Get
//      Return p_bol_MostrarExportacionExcel
//   End Get
//   Set(ByVal value As Boolean)
//      p_bol_MostrarExportacionExcel = value
//   End Set
//End Property
//#End Region
//'
#endregion
//'
//
public partial class navBase
{
    //
    #region New
    public navBase(int intidNavegador)
        : this()
    {
        // Agregue cualquier inicialización después de la llamada a InitializeComponent().
        IdNavegador = intidNavegador;
        //Asignar si el nav admite más de una instancia
        int intMasDeUnaInsancia = (int)clsBBDD.ObtenerDouble("SELECT func From navcabecera Where idnav =" + intidNavegador, clsVariables.e_TipoOrigen.Sistema, 0);
        bolMasUnaInstancia = Utiles.Enums.EnumFlagContieneValor(eFuncionalidades.MasDeUnaInstancia, intMasDeUnaInsancia);
        //
        ugFiltros.IniciarEstandarControl(); ugCampos.IniciarEstandarControl();
    }
    private navBase() //NO se puede crear un nav sin especificar su id
    { // Llamada necesaria para el Diseñador de Windows Forms.
        InitializeComponent();
        //NO AGREGAR NADA AQUÏ!! Va en la sobrecarga
    }
    #endregion
    //
    #region Funcionalidades
    [Flags()]
    enum eFuncionalidades
    {
        MostrarExportExcel = 1,
        BusquedaTiempoReal = 2,
        MasDeUnaInstancia = 4,
        CargarAlIniciar = 8,
        PermitirFiltroGrid = 16,
        PermitirAgrupacionGrid = 32,
        PermitirFijarGrid = 64
    }
    #endregion
    //
    #region Permisos
    [Flags()]
    enum eNavPermisos
    {
        Consulta = 1,
        Editar = 2,
        Anyadir = 4,
        Borrar = 8,
    }
    #endregion
    //
    #region                               Variables
    //Private DtOrigenDatos, DtNavCabecerayFiltros As DataTable
    //private Ctrl_UltraGrid ugCampos;
    //private Ctrl_UltraGrid ugFiltros;
    private int intFuncionalidades;
    private string sSql = string.Empty;
    private string p_ObjetoFuenteNoVista; //Si el objeto fuente es una vista aquí se almacena la tabla
    private mtoBase frmMantenimiento;
    private bool bolCargaAlIniciar;
    private DataDynamics.ActiveReports.ActiveReport3 rptNavegador;
    //private DataTable dtDefinicionCampos; // Almacena información de los campos (tabla campos) //Ha global
    //
    #region DespuesAplicarFiltro
    public event DespuesAplicarFiltroEventHandler DespuesAplicarFiltro;
    public delegate void DespuesAplicarFiltroEventHandler();
    //public event DespuesAplicarFiltroEventHandler DespuesAplicarFiltro
    //{
    //   add { DespuesAplicarFiltroEvent = (DespuesAplicarFiltroEventHandler)System.Delegate.Combine(DespuesAplicarFiltroEvent, value); }
    //   remove { DespuesAplicarFiltroEvent = (DespuesAplicarFiltroEventHandler)System.Delegate.Remove(DespuesAplicarFiltroEvent, value); }
    //}
    #endregion
    //
    #region  AntesLoadNavegador
    public delegate void AntesLoadNavegadorEventHandler();
    private AntesLoadNavegadorEventHandler AntesLoadNavegadorEvent;
    public event AntesLoadNavegadorEventHandler AntesLoadNavegador
    {
        add { AntesLoadNavegadorEvent = (AntesLoadNavegadorEventHandler)System.Delegate.Combine(AntesLoadNavegadorEvent, value); }
        remove { AntesLoadNavegadorEvent = (AntesLoadNavegadorEventHandler)System.Delegate.Remove(AntesLoadNavegadorEvent, value); }
    }
    #endregion
    //
    #region                                                                _bolUsuariosFechasAutomatico
    /// <summary>
    /// Si se cargará en el grid de campos del navegador el user de creación y modificación automáticamente
    /// </summary>
    /// <value></value>
    /// <returns></returns>
    /// <remarks></remarks>
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), Category(clsVariables.str_NombreAplicacion), Description("Si se cargará en el grid de campos del navegador el user de creación y modificación automáticamente")]
    public bool _bolUsuariosFechasAutomatico { get; set; }
    #endregion
    //
    #region                                                                NavegadorInfoExtra
    public enum EPanelInfoExtra { Panel1, Panel2, Panel3 }
    ////
    ///// <summary>
    ///// Info extra q mostrará el navegador. Al lado izdo del contador de registros
    ///// </summary>
    ///// <value></value>
    ///// <returns></returns>
    ///// <remarks></remarks>
    //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), Category(clsVariables.str_NombreAplicacion), Description("Info que mostrará en el panel de info extra del navegador")]
    //public string NavegadorInfoExtra
    //{
    //   get
    //   {
    //      return usbPie.Panels["InfoExtra"].Text;
    //   }
    //   set
    //   {
    //      usbPie.Panels["InfoExtra"].Text = value;
    //   }
    //}
    #endregion
    //
    #region                                                                ObjetoFuente
    private string p_ObjetoFuente;
    [Category(clsVariables.str_NombreAplicacion), Description("Objeto Fuente del navegador")]
    public string ObjetoFuente
    {
        get
        { return p_ObjetoFuente; }
        set
        {
            p_ObjetoFuente = value;
            if (value != null) { p_ObjetoFuenteNoVista = value.Replace("vis", ""); }
        }
    }
    #endregion
    //
    #region                                                                OrigenDatos
    [Category(clsVariables.str_NombreAplicacion), Description("Si el \'ObjetoFuente\' sale de \'sistema\' o \'cliente\'")]
    public clsVariables.e_TipoOrigen OrigenDatos { get; set; }
    #endregion
    //
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), ReadOnly(true)]
    public int TotalRegistros //Asignar el numero de registros
    {
        set
        { usbPie.Panels["usbRegistroTotal"].Text = value.ToString(); }
    }
    //
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), ReadOnly(true)]
    public int RegistroActual //Asignar el numero de registros
    {
        set
        { usbPie.Panels["usbRegistroActual"].Text = value.ToString(); }
    }
    //
    #region "                                                               FormNavegador"
    //private Form p_FormNavegador;
    public Form FormNavegador
    {
        get { return this; }// p_FormNavegador; }
        //set { p_FormNavegador = value; }
    }
    #endregion
    //
    #region                                                                IdNavegador
    private int p_IdNavegador = 0; //No puedo carga el navegador aquí pq sino cargaría todos los navegadores al iniciar menú
    [Category(clsVariables.str_NombreAplicacion), Description("Identificador único del navegador")]
    public int IdNavegador
    {
        get
        {
            return p_IdNavegador;
        }
        set
        {
            p_IdNavegador = value;
        }
    }
    #endregion
    //
    public bool bolMasUnaInstancia { get; set; }
    //
    #region                                                                bolNavTipoGrid
    private bool p_bolNavTipoGrid = false;
    /// <summary>
    /// Si el navegador solo tiene el grid de campos Ocultando la sección de filtros
    /// </summary>
    /// <value></value>
    /// <returns></returns>
    /// <remarks></remarks>
    [Category(clsVariables.str_NombreAplicacion), Description("Si el navegador solo tiene el grid de campos Ocultando la sección de filtros")]
    public bool bolNavTipoGrid
    {
        get
        {
            return p_bolNavTipoGrid;
        }
        set
        {
            p_bolNavTipoGrid = value;
            bolOcultarSalir = value;
            //sc_Principal.Panel1Collapsed = value
            //'Me.utmCabecera.DockWithinContainer = Me
            //'Me.utmCabecera.DockWithinContainerBaseType = GetType(System.Windows.Forms.Form)
            //utmCabecera.DockWithinContainer = IIf(value, Nothing, Me) 'utmCabecera.Visible = value
            //With utmMedio
            //   .UseLargeImagesOnMenu = Not value : .UseLargeImagesOnToolbar = Not value
            //End With
        }
    }
    #endregion
    //
    #region                                                                bolBusquedatiempoReal
    [Category(clsVariables.str_NombreAplicacion), Description("Sino hace falta pulsar el botón de filtro para que filtre resultados." + "Ojo pq. esta opción hace una consulta por cada pulsación de tecla. Puede aumentar el tiempo de ejecución")]
    public bool bolBusquedatiempoReal { get; set; }
    #endregion
    //
    #region                                                                bolAgregar
    /// <summary>
    /// Permite agregar registros a través del nav
    /// </summary>
    /// <value></value>
    /// <returns></returns>
    /// <remarks></remarks>
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), ReadOnly(true)]
    public bool bolAgregar { get; set; }//Por defecto  todo true
    #endregion
    #region                                                                bolModificar
    /// <summary>
    /// Permite  modificar  a través del nav
    /// </summary>
    /// <value></value>
    /// <returns></returns>
    /// <remarks></remarks>
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), ReadOnly(true)]
    public bool bolModificar { get; set; }//Por defecto  todo true
    #endregion
    #region                                                                bolConsultar
    /// <summary>
    /// Permite consultar a través del nav
    /// </summary>
    /// <value></value>
    /// <returns></returns>
    /// <remarks></remarks>
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), ReadOnly(true)]
    public bool bolConsultar { get; set; }//Por defecto  todo true
    #endregion
    #region                                                                bolBorrar
    /// <summary>
    /// Permite borrar a través del nav
    /// </summary>
    /// <value></value>
    /// <returns></returns>
    /// <remarks></remarks>
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), ReadOnly(true)]
    public bool bolBorrar { get; set; }//Por defecto  todo true
    #endregion
    //
    #region                                                                bolOcultarSalir
    /// <summary>
    /// Si el botón salir esta visible o no. Si es nav tipo grid siempre estará oculto
    /// </summary>
    /// <value></value>
    /// <returns></returns>
    /// <remarks></remarks>
    [Category(clsVariables.str_NombreAplicacion), Description("Si el botón salir esta visible o no. Si es nav tipo grid siempre estará oculto")]
    public bool bolOcultarSalir { get; set; }
    #endregion
    #endregion
    //'
    //
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), ReadOnly(true)]
    private void navBase_Shown(object sender, System.EventArgs e)
    {
        //Salvar el nombre del navegador
        if (!DesignMode)
        {
            if (clsBBDD.EjecutarExecuteNonQuery(String.Format("UPDATE navcabecera set nombrenav = \'{0}\' WHERE idnav = {1}", Name, IdNavegador), clsVariables.e_TipoOrigen.Sistema) != 1)
            {
                Utiles.Errores.LanzarError(this, "navBase_Shown", "Error al actualizar nombre navegador " + Name + " con id " + IdNavegador, null, MessageBoxIcon.Exclamation, true);
            }
        }
    }
    //'
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), ReadOnly(true)]
    public void Me_Load(object sender, System.EventArgs e) //NO poner en el diseñador pq. ya hay una llamada
    {
        DataTable dTgrid;
        DataTable DtNavPrivilegios;
        DataRow DrNavPrivilegios = null;
        //if (this.Parent is navBase) { p_FormNavegador = (Form)this.Parent; }
        System.Reflection.Assembly m_asmAssembly;
        string strPermisos = "";
        //'
        try
        {
            if (DesignMode)
            {
                return;
            }
            //Config Barra
            Utiles.UtilInfragistics.Ctrl_UltraToolbarsManager.ScpEstandarBarra(ref utmMedio); //Antes
            clsControlColores.CambiarColorBarra(utmMedio);
            //
            if (AntesLoadNavegadorEvent != null) AntesLoadNavegadorEvent(); //Para asignador idnavegador, objetofuente, etc.. antes del Load de otro form            
            //'Configurar apariencia grid general
            //UtilGrid.ConfigurarGrid(ugObjetosUsuarios): UtilGrid.ConfigurarGrid(ugUsuariosObjetos)
            //
            if (bolNavTipoGrid)
            {
                sc_Principal.Panel1Collapsed = bolNavTipoGrid;
                //Me.utmCabecera.DockWithinContainer = Me
                //Me.utmCabecera.DockWithinContainerBaseType = GetType(System.Windows.Forms.Form)
                utmCabecera.DockWithinContainer = bolNavTipoGrid ? null : this; //utmCabecera.Visible = value
                utmMedio.UseLargeImagesOnMenu = !bolNavTipoGrid;

                utmMedio.UseLargeImagesOnToolbar = !bolNavTipoGrid;
                // .Tools("Salir").SharedProps.Visible = bolOcultarSalir 'Ocultar botón salir
                //.Tools("Eliminar").SharedProps.Visible = False 'Ya lo deshabilita más adelante. En AplicarFiltroComun pero cuando es 'bolNavTipoGrid' no llega.Lo hago aki tb
                //
            }
            else
            {
                //Config Barra
                Utiles.UtilInfragistics.Ctrl_UltraToolbarsManager.ScpEstandarBarra(ref utmCabecera);
                clsControlColores.CambiarColorBarra(utmCabecera);
            }
            //
            //ugCampos = new Ctrl_UltraGrid();
            ugCampos.DoubleClickRow += new Alias_UltraWinGrid.DoubleClickRowEventHandler(Consultar);
            ugCampos.BeforeRowActivate += new Alias_UltraWinGrid.RowEventHandler(ugCampos_BeforeRowActivate);
            ugCampos.InitializeLayout += new Alias_UltraWinGrid.InitializeLayoutEventHandler(ugCampos_InitializeLayout);
            //ugCampos.InitializeLayout += new Alias_UltraWinGrid.InitializeLayoutEventHandler(ugCampos.Ctrl_UltraGrid_InitializeLayout);
            ugCampos.AfterCellUpdate += new Alias_UltraWinGrid.CellEventHandler(ugCampos.ulg_ActualizarCelda);
            ugCampos.BeforeRowsDeleted += new Alias_UltraWinGrid.BeforeRowsDeletedEventHandler(ugCampos.ulg_ActualizarCelda);

            //ugFiltros = new Ctrl_UltraGrid();
            ugFiltros.AfterCellUpdate += new Alias_UltraWinGrid.CellEventHandler(ugFiltros_AfterCellUpdate);
            ugFiltros.CellChange += new Alias_UltraWinGrid.CellEventHandler(ugFiltros_AfterCellUpdate);
            ugFiltros.InitializeLayout += new Alias_UltraWinGrid.InitializeLayoutEventHandler(ugFiltros_InitializeLayout);
            //ugFiltros.InitializeLayout += new Alias_UltraWinGrid.InitializeLayoutEventHandler(ugFiltros.Ctrl_UltraGrid_InitializeLayout);
            ugFiltros.AfterCellUpdate += new Alias_UltraWinGrid.CellEventHandler(ugFiltros.ulg_ActualizarCelda);
            ugFiltros.BeforeRowsDeleted += new Alias_UltraWinGrid.BeforeRowsDeletedEventHandler(ugFiltros.ulg_ActualizarCelda);
            //
            //Crear un DT para agregarlo al GRid (no se puede crear directo según Infra. Necesita un objeto)
            dTgrid = new DataTable();
            //Añadir las columnas necesarias
            dTgrid.Columns.Add("Campos", typeof(string));
            dTgrid.Columns.Add("CamposTitulo", typeof(string));
            dTgrid.Columns.Add("Condiciones", typeof(string));
            dTgrid.Columns.Add("ValorFiltro", typeof(string));
            dTgrid.Columns.Add("strWhere", typeof(string));
            dTgrid.Columns.Add("strTipoCampo", typeof(string));
            //
            //sc_Principal.Panel1.Controls.Add(ugFiltros);
            //Panel2_Fill_Panel.Controls.Add(ugCampos); //sc_Principal.Panel2.Controls.Add(ugCampos)
            //
            ugFiltros.bol_PermitirAgrupar = false;
            ugFiltros.bol_PermitirFiltrar = false;
            ugFiltros.bol_PermitirEditar = true;
            ugFiltros.bol_PermitirOrdenar = false;
            ugFiltros.DataSource = dTgrid; //Se carga en el Initialiteayout           
            ugCampos.bol_PermitirFijar = true; //Para fijar la columna de seleccionar, más adelante se determina si de verdad puede o no
            //
            SetImagenesBotones();
            //
            m_asmAssembly = System.Reflection.Assembly.GetExecutingAssembly();
            CrearInstanciaMto(); //Crear instancia del mto
            //frmMantenimiento = (mtoBase)m_asmAssembly.CreateInstance(String.Format("mto{0}", p_ObjetoFuenteNoVista), true); //, True, Reflection.BindingFlags.CreateInstance, Nothing,p_ObjetoFuente )
            rptNavegador = (Alias_ActiveReports.ActiveReport3)m_asmAssembly.CreateInstance(clsVariables.str_NombreAplicacion + ".rpt" + p_ObjetoFuenteNoVista, true);
            //
            if (frmMantenimiento == null)
            {
                utmMedio.Tools["Consultar"].SharedProps.Visible = false; // Not frmMantenimiento Is Nothing
                utmMedio.Tools["Anyadir"].SharedProps.Visible = false; //Not frmMantenimiento Is Nothing
            }
            //
            utmMedio.Tools["Salir"].SharedProps.Visible = !bolOcultarSalir; //Ocultar botón salir
            utmMedio.Tools["Imprimir"].SharedProps.Visible = rptNavegador != null;
            //
            if (clsVariables.bol_Pruebas)
            {
                usbPie.Panels["usbIdNav"].Text = "Id Navegador: " + IdNavegador;
                usbPie.Panels["usbObjetoFuente"].Text = "- Objeto Fuente: " + p_ObjetoFuente;
            }
            //
            DtNavPrivilegios = clsBBDD.DtObtener(String.Format(" SELECT * FROM navprivilegios " +
              " WHERE idgrupo is null or idgrupo = " + clsVariables.UsuarioActualInfo.intGrupoUsuario, IdNavegador), clsVariables.e_TipoOrigen.Sistema, false);
            foreach (DataRow Dr in DtNavPrivilegios.Rows)
            {
                if (Dr["idgrupo"] != System.DBNull.Value &&
                    Convert.ToInt64(Dr["idgrupo"]) == clsVariables.UsuarioActualInfo.intGrupoUsuario)
                { DrNavPrivilegios = Dr; }
            }
            if (DrNavPrivilegios == null && DtNavPrivilegios.Rows.Count > 0) { DrNavPrivilegios = DtNavPrivilegios.Rows[0]; }
            bolAgregar = true; bolModificar = true; bolConsultar = true; bolBorrar = true; //Por defecto  todo true
            if (DrNavPrivilegios != null)
            {
                //Config de las Funcionalidades  (si están definidas)
                bolAgregar = (clsBBDD.DevolverBooleano(DrNavPrivilegios["agregar"]));
                bolModificar = (clsBBDD.DevolverBooleano(DrNavPrivilegios["modificar"]));
                bolConsultar = (clsBBDD.DevolverBooleano(DrNavPrivilegios["consulta"]));
                bolBorrar = (clsBBDD.DevolverBooleano(DrNavPrivilegios["borrar"])); //POr defcto  todo true
                utmMedio.Tools["Consultar"].SharedProps.Enabled = bolConsultar;
                utmMedio.Tools["Eliminar"].SharedProps.Enabled = bolBorrar;
                utmMedio.Tools["Anyadir"].SharedProps.Enabled = bolAgregar;
            }
            strPermisos += "Consultar: " + (bolConsultar == true ? "S" : "N").ToString();
            strPermisos += " - Añadir: " + (bolAgregar == true ? "S" : "N").ToString();
            strPermisos += " - Editar: " + (bolModificar == true ? "S" : "N").ToString();
            strPermisos += " - Eliminar: " + (bolBorrar == true ? "S" : "N").ToString();
            usbPie.Panels["usbPermisos"].Text = strPermisos;
            //
        }
        catch (Exception ex)
        {
            //ugCampos = null;
            //ugFiltros = null;
            dTgrid = null;
            Utiles.Errores.LanzarError(this, "Load navBase", "", ex, MessageBoxIcon.Exclamation, true);
        }
    }
    //'
    private void SetImagenesBotones()
    {
        //Imagenes botones
        Infragistics.Win.UltraWinToolbars.SharedProps with_2 = utmCabecera.Tools["AplicarFiltro"].SharedProps;
        with_2.AppearancesLarge.Appearance.Image = clsImagenes.Filtrar;
        with_2.AppearancesSmall.Appearance.Image = with_2.AppearancesLarge.Appearance.Image;
        Infragistics.Win.UltraWinToolbars.SharedProps with_3 = utmCabecera.Tools["BorrarFiltro"].SharedProps;
        with_3.AppearancesLarge.Appearance.Image = clsImagenes.EliminarFiltro;
        with_3.AppearancesSmall.Appearance.Image = with_3.AppearancesLarge.Appearance.Image;
        Infragistics.Win.UltraWinToolbars.SharedProps with_4 = utmCabecera.Tools["OcultarFiltro"].SharedProps;
        with_4.AppearancesLarge.Appearance.Image = clsImagenes.OcultarFiltro;
        with_4.AppearancesSmall.Appearance.Image = with_4.AppearancesLarge.Appearance.Image;
        Infragistics.Win.UltraWinToolbars.SharedProps with_5 = utmCabecera.Tools["MostrarFiltro"].SharedProps;
        with_5.AppearancesLarge.Appearance.Image = clsImagenes.MostrarFiltro;
        with_5.AppearancesSmall.Appearance.Image = with_5.AppearancesLarge.Appearance.Image;
        //
        Infragistics.Win.UltraWinToolbars.SharedProps with_7 = utmMedio.Tools["Salir"].SharedProps;
        with_7.AppearancesLarge.Appearance.Image = clsImagenes.Salir;
        with_7.AppearancesSmall.Appearance.Image = with_7.AppearancesLarge.Appearance.Image;
        Infragistics.Win.UltraWinToolbars.SharedProps with_8 = utmMedio.Tools["Anyadir"].SharedProps;
        with_8.AppearancesLarge.Appearance.Image = clsImagenes.Anyadir;
        with_8.AppearancesSmall.Appearance.Image = with_8.AppearancesLarge.Appearance.Image;
        Infragistics.Win.UltraWinToolbars.SharedProps with_9 = utmMedio.Tools["Consultar"].SharedProps;
        with_9.AppearancesLarge.Appearance.Image = clsImagenes.Consultar;
        with_9.AppearancesSmall.Appearance.Image = with_9.AppearancesLarge.Appearance.Image;
        Infragistics.Win.UltraWinToolbars.SharedProps with_10 = utmMedio.Tools["Eliminar"].SharedProps;
        with_10.AppearancesLarge.Appearance.Image = clsImagenes.Eliminar;
        with_10.AppearancesSmall.Appearance.Image = with_10.AppearancesLarge.Appearance.Image;
        Infragistics.Win.UltraWinToolbars.SharedProps with_11 = utmMedio.Tools["Imprimir"].SharedProps;
        with_11.AppearancesLarge.Appearance.Image = clsImagenes.Imprimir;
        with_11.AppearancesSmall.Appearance.Image = with_11.AppearancesLarge.Appearance.Image;
        Infragistics.Win.UltraWinToolbars.SharedProps with_12 = utmMedio.Tools["ExportaraExcel"].SharedProps;
        with_12.AppearancesLarge.Appearance.Image = clsImagenes.Excel;
        with_12.AppearancesSmall.Appearance.Image = with_12.AppearancesLarge.Appearance.Image;
    }
    //'
    private ValueList AgregarValueListTipoCombo(DataRow DrObj)
    {
        ValueList obj_valueList = new ValueList();
        DataTable Dt;
        string strCampoDisplay;
        string strCampoValue;
        //'
        try
        {
            strCampoValue = DrObj["combovalue"].ToString();

            strCampoDisplay = DrObj["combodisplay"].ToString();
            Dt = clsBBDD.DtObtener(string.Format("SELECT {0},{1} FROM {2} Where {3}",
                  strCampoValue, strCampoDisplay, DrObj["combotabla"],
                  string.IsNullOrEmpty(DrObj["combofiltro"].ToString()) ? "1=1" : DrObj["combofiltro"]),
                  DrObj["combotipoorigen"].ToString() == "cliente" ? clsVariables.e_TipoOrigen.Cliente : clsVariables.e_TipoOrigen.Sistema,
                  false);

            //
            foreach (DataRow Dr in Dt.Rows)
            {
                obj_valueList.ValueListItems.Add(Dr[strCampoValue], Dr[strCampoDisplay].ToString());
            }
            //
            obj_valueList.SortStyle = ValueListSortStyle.Ascending;
            obj_valueList.ValueListItems.Add(string.Empty, string.Empty);
            return obj_valueList;
            //
        }
        catch (Exception ex)
        {
            Utiles.Errores.LanzarError(this, "AgregarToValueListSegunTipoCampo", "", ex, MessageBoxIcon.Exclamation, true);
            obj_valueList = null;

            return null;
        }
    }
    //'
    private ValueList AccionesSegunTipoCampo(string str_TipoCampo) //!!Crear columna filtro (2ª)
    {
        ValueList obj_valueList = new ValueList();
        str_TipoCampo = str_TipoCampo.ToLower();
        //'
        try
        {
            //
            switch (str_TipoCampo)
            {
                case "combo":
                    obj_valueList.ValueListItems.Add("= {0}", "=");
                    break;
                case "string":
                    obj_valueList.ValueListItems.Add("= \'{0}\'", "=");
                    obj_valueList.ValueListItems.Add("<> \'{0}\'", "<>");
                    obj_valueList.ValueListItems.Add("like \'%{0}%\'", "Contenga");
                    obj_valueList.ValueListItems.Add("not like \'%{0}%\'", "No Contenga");
                    obj_valueList.ValueListItems.Add("like \'{0}%\'", "Comienze");
                    obj_valueList.ValueListItems.Add("like \'%{0}\'", "Acabe");
                    //
                    break;
                case "boolean":
                    obj_valueList.ValueListItems.Add("in({0})", "Todos/Si/No");
                    //
                    ValueList obj_valueListCheckBox = new ValueList();
                    obj_valueListCheckBox.ValueListItems.Add("1,0", "Todos");
                    obj_valueListCheckBox.ValueListItems.Add("1", "Verdadero (Si)");
                    obj_valueListCheckBox.ValueListItems.Add("0", "Falso (No)");
                    ugFiltros.ActiveRow.Cells["ValorFiltro"].ValueList = obj_valueListCheckBox;
                    //ugFiltros.ActiveRow.Cells["ValorFiltro"].Style = Alias_UltraWinGrid.ColumnStyle.CheckBox;
                    //ugFiltros.ActiveRow.Cells["ValorFiltro"].Value = false;
                    ugFiltros.ActiveRow.Cells["ValorFiltro"].Style = Alias_UltraWinGrid.ColumnStyle.DropDownList;
                    break;
                case "date":
                case "time":
                case "datetime":
                    obj_valueList.ValueListItems.Add("= '{0}'", "=");
                    obj_valueList.ValueListItems.Add("> '{0}'", ">");
                    obj_valueList.ValueListItems.Add("< '{0}'", "<");
                    obj_valueList.ValueListItems.Add("<= '{0}'", "<=");
                    obj_valueList.ValueListItems.Add(">= '{0}'", ">=");
                    obj_valueList.ValueListItems.Add("<> '{0}'", "<>");
                    //  
                    ugFiltros.ActiveRow.Cells["ValorFiltro"].Style = Alias_UltraWinGrid.ColumnStyle.Date;
                    break;
                case "double":
                case "decimal":
                case "integer":
                    obj_valueList.ValueListItems.Add("= {0}", "=");
                    obj_valueList.ValueListItems.Add("> {0}", ">");
                    obj_valueList.ValueListItems.Add("< {0}", "<");
                    obj_valueList.ValueListItems.Add("<= {0}", "<=");
                    obj_valueList.ValueListItems.Add(">= {0}", ">=");
                    obj_valueList.ValueListItems.Add("<> {0}", "<>");
                    //
                    if (str_TipoCampo == "integer")
                    { ugFiltros.ActiveRow.Cells["ValorFiltro"].Style = Alias_UltraWinGrid.ColumnStyle.Integer; }
                    else { ugFiltros.ActiveRow.Cells["ValorFiltro"].Style = Alias_UltraWinGrid.ColumnStyle.Double; }
                    //ugFiltros.ActiveRow.Cells["ValorFiltro"].Appearance.FontData.Underline = DefaultableBoolean.False;
                    break;
            }
            //
            //
            return obj_valueList;
            //
        }
        catch (Exception ex)
        {
            Utiles.Errores.LanzarError(this, "AgregarToValueListSegunTipoCampo", "", ex, MessageBoxIcon.Exclamation, true);
            obj_valueList = null;

            return null;
        }
    }
    //'
    #region  Opciones y Acciones toolbars
    public void utmMedio_ToolClick(System.Object sender, Infragistics.Win.UltraWinToolbars.ToolClickEventArgs e)
    {
        System.Collections.Generic.List<string> LstFiltros;
        string strValorFiltro = string.Empty;
        //'
        try
        {
            Cursor.Current = Cursors.WaitCursor;
            //Opciones del Menú
            switch (e.Tool.Key)
            {
                case "ExportaraExcel":
                    LstFiltros = new System.Collections.Generic.List<string>();
                    //
                    foreach (UltraGridRow Ugr in ugFiltros.Rows)
                    {
                        strValorFiltro = Ugr.Cells["ValorFiltro"].Value.ToString();
                        if (!string.IsNullOrEmpty(strValorFiltro))
                        {
                            LstFiltros.Add(string.Format("[{0}] {1}", Ugr.Cells["Campos"].Value, strValorFiltro));
                        }
                    }
                    //
                    Utiles.UtilInfragistics.Ctrl_UltraGrid.ExportGridToExcel(ugCampos, "", true,
                                                  UtilInfragistics.Ctrl_UltraGrid.eIdioma.Espanyol, true, LstFiltros);
                    break;
                //
                case "Salir": FormNavegador.Close(); break;
                case "Anyadir": Anyadir(); break;
                case "Consultar": Consultar(null, null); break;
                case "Eliminar": Eliminar(); break;
                //
            }
        }
        catch (Exception ex)
        {
            Utiles.Errores.LanzarError(this, "utmMedio_ToolClick", "", ex, MessageBoxIcon.Exclamation, true);
        }
        finally
        {
            Cursor.Current = Cursors.Default;
        }
    }
    //'
    public void Eliminar() //TODO: Privilegios
    {
        //int i;
        DataTable DtCampos;
        Exception Ex = null;
        //bool bol_ActualizarDatos = false;
        System.Collections.ArrayList alDrDelete;
        //'
        try
        {
            if (ugCampos.Rows.Count > 0)
            {
                if (ugCampos.Rows[0].IsExpandable) { MessageBox.Show("No se puede eliminar filas cuando hay agrupaciones.", "Atención"); }
                else
                {
                    //if (MessageBox.Show("Esta seguro que desea eliminar los elementos seleccionados?", MessageBoxIcon.Information + MessageBoxIcon.YesNo + MessageBoxIcon.DefaultButton2, "Ateción") == MsgBoxResult.Yes)
                    if (MessageBox.Show("Esta seguro que desea eliminar los elementos seleccionados?", "Atención", MessageBoxButtons.YesNo, MessageBoxIcon.Information, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
                    {
                        ugCampos.PerformAction(UltraGridAction.ExitEditMode); //Actualizar fila actual
                        ugCampos.PerformAction(UltraGridAction.CommitRow);
                        //
                        DtCampos = (DataTable)ugCampos.DataSource;
                        //
                        //Borrar elementos seleccionados. Copyright: SC
                        //i = 0;
                        alDrDelete = new System.Collections.ArrayList();
                        for (int j = 0; j <= ugCampos.DisplayLayout.Rows.Count - 1; j++)
                        {
                            Alias_UltraWinGrid.UltraGridRow Dr = ugCampos.DisplayLayout.Rows[j];
                            //
                            if (!Dr.IsFilteredOut) //Sino está filtrada
                            {
                                if (Convert.ToInt16(Dr.Cells["Seleccionar"].Value) == 1)
                                {
                                    alDrDelete.Add(((DataRowView)Dr.ListObject).Row);
                                    //((DataRowView)Dr.ListObject).Row.RowState=DataRowState.Deleted;
                                    //((DataRowView)Dr.ListObject).Row.Delete();
                                    //bol_ActualizarDatos = true; 
                                }
                                //else { i++; }
                            }
                        }
                        //
                        //Actualizar borrado
                        if (alDrDelete.Count > 0) // bol_ActualizarDatos)
                        {
                            foreach (DataRow dR in alDrDelete) { dR.Delete(); } //Borrar filas datasource Grid
                            //
                            Ex = clsBBDD.EjecutarUpdate(ref DtCampos, "SELECT * FROM " + p_ObjetoFuenteNoVista, OrigenDatos);
                            if (Ex == null)
                            { ugCampos.DataBind(); MessageBox.Show("Operación realizada con éxito", "Ok"); }
                            else
                            {
                                //foreach (DataRow dR in alDrDelete) { ((DataTable) ugCampos.DataSource).ImportRow(dR); }
                                //ugCampos.DataBind();
                                TrataErroresGenericos(null, Ex); //throw (new Exception(Ex.Message, Ex));                                 
                            }
                        }
                    }
                }
            }
        }
        catch (Exception ex2)
        { Utiles.Errores.LanzarError(this, "Eliminar", "", ex2, MessageBoxIcon.Exclamation, true); }
        finally { alDrDelete = null; }
    }
    //'
    public void Consultar(object sender, Alias_UltraWinGrid.DoubleClickRowEventArgs e) //TODO: Privilegios
    {
        //Si tiene permisos
        if (ugCampos.ActiveRow != null)
        {
            ComunAnyadirConsultar(((DataRowView)ugCampos.ActiveRow.ListObject).Row, mtoBase.eTipoAccion.Consultar);
        }
    }
    public void AnyadirDesdeGuardarYLimpiar(Object sender, FormClosedEventArgs e)
    {
        Anyadir();
    }

    //'
    public void Anyadir() //TODO: Privilegios
    {
        DataRow Dr;

        DataTable DtugCampos;
        System.Reflection.Assembly m_asmAssembly;
        //'
        if (ugCampos.DataSource == null) //Sino se pulso aplicar filtro
        {
            sSql = string.Format("SELECT 0 Seleccionar, {0}.* FROM {0} WHERE 1 = 0", p_ObjetoFuente);
            AplicarFiltroComun(sSql, mtoBase.eTipoAccion.Anyadir); //Cargar solo estructura tabla
        }
        //
        m_asmAssembly = System.Reflection.Assembly.GetExecutingAssembly();
        frmMantenimiento = (mtoBase)m_asmAssembly.CreateInstance("mto" + p_ObjetoFuenteNoVista, true);
        //
        //ugCampos.DataBind();
        DtugCampos = (DataTable)ugCampos.DataSource;
        //DtugCampos.AcceptChanges();
        Dr = DtugCampos.NewRow(); //TODO: Agrega un nuevo ID aunque no se haga el insert
        ComunAnyadirConsultar(Dr, mtoBase.eTipoAccion.Anyadir);
    }
    //'
    private void ComunAnyadirConsultar(DataRow RowDestino, mtoBase.eTipoAccion pTipoAccion)
    {

        CrearInstanciaMto();
        frmMantenimiento.p_ObjetoFuente = p_ObjetoFuenteNoVista;
        frmMantenimiento.p_OrigenDatos = OrigenDatos;
        frmMantenimiento.Text = "Mantenimiento " + Text;
        frmMantenimiento.TipoAccion = pTipoAccion;
        frmMantenimiento.NavUgDatos = ugCampos;
        frmMantenimiento.NavOrigen = this;
        frmMantenimiento.RowDatosMto = RowDestino; //ugCampos.ActiveRow.ListObject.row
        //frmMantenimiento.Show(); //No se limpia aunque haga el close... supongo q es por este With.. me conviene dejarlo así? No lo se
        Form frmObjetivo = (Form)frmMantenimiento;
        Utiles.Aplicacion.AbrirFormSegunTipoShowForm(ref frmObjetivo);
    }
    //
    private void CrearInstanciaMto()
    {
        if (frmMantenimiento == null || frmMantenimiento.IsDisposed)
        {
            System.Reflection.Assembly m_asmAssembly;
            m_asmAssembly = System.Reflection.Assembly.GetExecutingAssembly();
            frmMantenimiento = (mtoBase)m_asmAssembly.CreateInstance(String.Format("mto{0}", p_ObjetoFuenteNoVista), true); //, True, Reflection.BindingFlags.CreateInstance, Nothing,p_ObjetoFuente )
        }
    }
    //
    public void utbCabecera_ToolClick(System.Object sender, Infragistics.Win.UltraWinToolbars.ToolClickEventArgs e)
    {
        try
        {
            Cursor.Current = Cursors.WaitCursor;
            //Opciones del Menú
            switch (e.Tool.Key)
            {
                case "AplicarFiltro": AplicarFiltro(); break;
                case "BorrarFiltro": EliminarFiltro(); break;
                case "OcultarFiltro": OcultarFiltro(); break;
                case "MostrarFiltro": MostrarFiltro(); break;
            }
        }
        catch (Exception ex)
        {
            Utiles.Errores.LanzarError(this, "utbCabecera_ToolClick", "", ex, MessageBoxIcon.Exclamation, true);
        }
        finally
        {
            Cursor.Current = Cursors.Default;
        }
    }

    //------------------Acciones botones
    private void OcultarFiltro()
    {
        //
        for (int intNTools = 0; intNTools <= utmCabecera.Tools.Count - 1; intNTools++)
        {
            if (utmCabecera.Tools[intNTools] is Infragistics.Win.UltraWinToolbars.ButtonTool && utmCabecera.Tools[intNTools].Key.Trim() == "MostrarFiltro")
            {
                utmCabecera.Tools[intNTools].SharedProps.Visible = true;
            }
            else
            {
                utmCabecera.Tools[intNTools].SharedProps.Visible = false;
            }
        }
        //
        sc_Principal.Panel1Collapsed = true;
    }

    private void MostrarFiltro()
    {
        int intNTools;
        //'
        //utmCabecera.Tools("MostrarFiltro").SharedProps.Visible = False
        for (intNTools = 0; intNTools <= utmCabecera.Tools.Count - 1; intNTools++)
        {
            //If utmCabecera.Tools(intNTools).GetType.FullName = "UltraWinToolbars.ButtonTool" And _
            // utmCabecera.Tools(intNTools).Key.Trim = "MostrarFiltro" Then
            Infragistics.Win.UltraWinToolbars.ToolBase with_1 = utmCabecera.Tools[intNTools];
            if (with_1.Key.Trim() == "MostrarFiltro")
            {

                with_1.SharedProps.Visible = false;
            }
            else
            {

                with_1.SharedProps.Visible = true;
            }
        }
        sc_Principal.Panel1Collapsed = false;
    }
    //
    private void EliminarFiltro()
    {
        ugFiltros.CellChange -= new Alias_UltraWinGrid.CellEventHandler(ugFiltros_AfterCellUpdate);
        ugFiltros.AfterCellUpdate -= new Alias_UltraWinGrid.CellEventHandler(ugFiltros_AfterCellUpdate);
        //
        foreach (UltraGridRow Ugr in ugFiltros.Rows)
        {
            if (Ugr.Cells["ValorFiltro"].Style == Alias_UltraWinGrid.ColumnStyle.Date)
            { Ugr.Cells["ValorFiltro"].Value = System.DBNull.Value; }
            else { Ugr.Cells["ValorFiltro"].Value = string.Empty; }
            //
            Ugr.Cells["strWhere"].Value = string.Empty;
        }
        //
        ugFiltros.AfterCellUpdate += new Alias_UltraWinGrid.CellEventHandler(ugFiltros_AfterCellUpdate);
        ugFiltros.CellChange += new Alias_UltraWinGrid.CellEventHandler(ugFiltros_AfterCellUpdate);
    }
    //
    /// <summary>
    /// Le pasas la row del mto y te la resfresca en el nav
    /// </summary>
    /// <param name="DrMto"></param>
    public void RefrescarRowActual(System.Data.DataRow DrMto)
    {
        System.Data.DataRow DrNav = ((System.Data.DataRowView)ugCampos.ActiveRow.ListObject).Row;
        foreach (DataColumn Dcc in DrMto.Table.Columns)
        {
            //If Not RowDatos.Table.Columns.Contains(.ColumnName) Then
            DrNav[Dcc.ColumnName] = DrMto[Dcc.ColumnName];
            //End If
        }
        //ugCampos.ActiveRow.Update();
        //ugCampos.PerformAction(UltraGridAction.CommitRow);
        //.ActiveRow.Update();
        ugCampos.DataBind();
    }
    //
    internal void AplicarFiltro()
    {
        string sSql = string.Empty;
        string strWhere = string.Empty;
        string strJoinUsuarioFecha = string.Empty; //Ojo! Cambian según la apliación
        string strCamposUsuarioFecha = string.Empty; //Ojo! Cambian según la apliación
        //'
        //With ugFiltros 'Actualizar filtros 'Y alo he hecho antes de llamar aki. Fuera
        //   .PerformAction(UltraGridAction.ExitEditMode)
        //   .PerformAction(UltraGridAction.CommitRow)
        //End With
        //
        //Crear la sentencia q recupera el usaruic y m descripcion y el join para obtenerlo
        if (_bolUsuariosFechasAutomatico)
        {
            strCamposUsuarioFecha = " CONCAT(CONCAT(CONCAT(CONCAT(TRIM(`u2`.`nombre`), \' \'), " +
                                    " TRIM(`u2`.`primerapellido`)),\' \'),	" + " TRIM(`u2`.`segundoapellido`)) nombreusuariocreador " +
                                    ", CONCAT(CONCAT(CONCAT(CONCAT(TRIM(`u3`.`nombre`), \' \'), TRIM(`u3`.`primerapellido`)),\' \'),	" +
                                    " TRIM(`u3`.`segundoapellido`)) nombreusuariomodificador ";
            strJoinUsuarioFecha = " LEFT JOIN `macasistema`.`usuarios` u2 ON (`tbl`.`idusuarioc` = `u2`.`idusuario`) " +
                                    " LEFT JOIN `macasistema`.`usuarios` u3 ON (`tbl`.`idusuariom` = `u3`.`idusuario`) ";
            sSql = string.Format(" SELECT 0 Seleccionar, tbl.*, {1} FROM {0} tbl {2} WHERE 1 = 1 ", p_ObjetoFuente, strCamposUsuarioFecha, strJoinUsuarioFecha);
        }
        else
        {
            sSql = string.Format(" SELECT 0 Seleccionar, tbl.* FROM {0} tbl WHERE 1 = 1 ", p_ObjetoFuente);
        }
        //
        //Recorrer el grid de filtro y ir construyendo la sentencia Where
        foreach (UltraGridRow ugR in ugFiltros.Rows)
        {
            strWhere = ugR.Cells["strWhere"].Value.ToString();
            if (!string.IsNullOrEmpty(strWhere))
            {
                strWhere = "tbl." + ugR.Cells["campos"].Value.ToString() + " " + strWhere;
                sSql += " AND " + strWhere;
            }
        }
        //
        AplicarFiltroComun(sSql); //Cargar los datos del grid Campos
        if (DespuesAplicarFiltro != null) { DespuesAplicarFiltro(); }
    }
    //
    public void HabilitarConsultar_Eliminar()
    {
        DataTable DtOrigenDatos = (DataTable)ugCampos.DataSource;
        if (DtOrigenDatos == null || DtOrigenDatos.Rows.Count == 0)
        {
            utmMedio.Tools["Eliminar"].SharedProps.Enabled = false;
            utmMedio.Tools["Consultar"].SharedProps.Enabled = false;
        }
        else
        {
            utmMedio.Tools["Eliminar"].SharedProps.Enabled = true;
            utmMedio.Tools["Consultar"].SharedProps.Enabled = true;
        }
    }
    //
    /// <summary>
    /// Cargar los datos del grid Campos. Se usa en varios sitios
    /// </summary>
    /// <param name="strSql"></param>
    /// <remarks></remarks>
    private void AplicarFiltroComun(string strSql, mtoBase.eTipoAccion TipoAccion = mtoBase.eTipoAccion.Anyadir)
    {
        DataTable DtOrigenDatos;
        //'
        DtOrigenDatos = clsBBDD.DtObtener(strSql, OrigenDatos, true); //Obtener datos grid después aplicar filtro
        Console.WriteLine("Aplicar filtro sql: " + strSql);
        if (DtOrigenDatos == null || DtOrigenDatos.Rows.Count == 0)
        {
            // utmMedio.Tools["Eliminar"].SharedProps.Enabled = false;
            // utmMedio.Tools["Consultar"].SharedProps.Enabled = false;
            if (!bolBusquedatiempoReal && !bolNavTipoGrid && !(TipoAccion == mtoBase.eTipoAccion.Anyadir))
            {
                MessageBox.Show("Sin resultados en la consulta", "Resultado", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            //
        }
        else if (DtOrigenDatos.Rows.Count > 0)
        {
            //utmMedio.Tools["Eliminar"].SharedProps.Enabled = true;
            //utmMedio.Tools["Consultar"].SharedProps.Enabled = true;
            TotalRegistros = DtOrigenDatos.Rows.Count;
        }
        ugCampos.DataSource = DtOrigenDatos; //!! CArga datos en ugCAmpos
    }
    //
    public Infragistics.Win.UltraWinStatusBar.UltraStatusPanel NavegadorDevolverPanel(EPanelInfoExtra PanelInfoExtra)
    {
        //usbPie.Panels["InfoExtra1"].Visible = false;
        //usbPie.Panels["InfoExtra2"].Visible = false;
        //usbPie.Panels["InfoExtra3"].Visible = false;
        switch (PanelInfoExtra)
        {
            case EPanelInfoExtra.Panel1: usbPie.Panels["InfoExtra1"].Visible = true; return usbPie.Panels["InfoExtra1"];
            case EPanelInfoExtra.Panel2: usbPie.Panels["InfoExtra2"].Visible = true; return usbPie.Panels["InfoExtra2"];
            case EPanelInfoExtra.Panel3: usbPie.Panels["InfoExtra3"].Visible = true; return usbPie.Panels["InfoExtra3"];
            default: return null;
        }
    }
    //
    /// <summary>
    /// Escribe texto en los paneles del navegador
    /// </summary>
    /// <param name="strValorPanel">TExto ha agregar</param>
    /// <param name="PanelInfoExtra">Panel origen</param>
    /// <param name="AgregarATextoExistente">El texto sustituye el actual o se agrega al actual?</param>
    public void NavegadorSetInfoExtra(string strValorPanel, EPanelInfoExtra PanelInfoExtra,
                                                    bool bolAgregarATextoExistente = false)
    {
        Infragistics.Win.UltraWinStatusBar.UltraStatusPanel PanelObjetivo = null;
        //usbPie.Panels["InfoExtra1"].Visible = false;
        //usbPie.Panels["InfoExtra2"].Visible = false;
        //usbPie.Panels["InfoExtra3"].Visible = false;
        //
        switch (PanelInfoExtra)
        {
            case EPanelInfoExtra.Panel1:
                PanelObjetivo = usbPie.Panels["InfoExtra1"];
                if (bolAgregarATextoExistente == false) { PanelObjetivo.Text = ""; } break;
            case EPanelInfoExtra.Panel2:
                PanelObjetivo = usbPie.Panels["InfoExtra2"];
                if (bolAgregarATextoExistente == false) { PanelObjetivo.Text = ""; } break;
            case EPanelInfoExtra.Panel3:
                PanelObjetivo = usbPie.Panels["InfoExtra3"];
                if (bolAgregarATextoExistente == false) { PanelObjetivo.Text = ""; } break;
        }
        PanelObjetivo.Text += strValorPanel; PanelObjetivo.Visible = true;
    }
    //
    #endregion
    //'
    /// <summary>
    /// Después de modificar un valor, recalcular la sentencia Where.
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    /// <remarks></remarks>
    private void ugFiltros_AfterCellUpdate(object sender, Alias_UltraWinGrid.CellEventArgs e)
    {
        string strValor = string.Empty;
        string strTituloCelda = "a";
        //'
        //
        if (e.Cell.Column.Key.ToLower() != "strwhere" && e.Cell.IsInEditMode) //Si está en modo edición. SAlta 2 veces por entrar en Where pero no entra en el IF
        {
            strTituloCelda = e.Cell.Column.Header.Caption.Trim();
            //RemoveHandler ugFiltros.AfterCellUpdate, AddressOf ugFiltros_AfterCellUpdate
            //RemoveHandler ugFiltros.CellChange, AddressOf ugFiltros_AfterCellUpdate
            //
            //Si es el combo actualizo
            if (strTituloCelda == "Condiciones")
            {
                ugFiltros.PerformAction(UltraGridAction.CommitRow);
                ugFiltros.PerformAction(UltraGridAction.ExitEditMode);
                ugFiltros.PerformAction(UltraGridAction.EnterEditMode);
            }
            //
            if (strTituloCelda == "Filtro")
            {
                if (e.Cell.Style == Alias_UltraWinGrid.ColumnStyle.DropDownList)
                {
                    ugFiltros.PerformAction(UltraGridAction.ExitEditMode); //Sino haces esto el value del e.cell (dropdownlist) está en nulo
                    strValor = e.Cell.Value.ToString();
                }
                else
                { strValor = e.Cell.Text; }
                //
            }
            else
            { strValor = e.Cell.Row.Cells["ValorFiltro"].Value.ToString(); }

            //
            if (!string.IsNullOrEmpty(strValor) && strValor.Trim() != "__/__/____") //__/__/____ = Tipos fecha (chapuza)
            {
                //string TipoDatos = ((DataRowView) e.Cell.Row.ListObject).Row["CampoTipo"].ToString();
                //PerformAction(UltraGridAction.EnterEditMode) '.EnterEditModeAndDropdown
                //Acción especial para las fechas
                //if (TipoDatos == "time" || TipoDatos == "date" || TipoDatos == "datetime")  
                //
                //Tratamiento especial  según tipo campo
                switch (e.Cell.Row.Cells["ValorFiltro"].Style)
                {
                    case Alias_UltraWinGrid.ColumnStyle.Date:
                        //if ( DateTime.TryParse(strValor, out DateTime Num) ==  true)
                        if (Microsoft.VisualBasic.Information.IsDate(strValor) &&
                           clsVariables.e_ProviderNombreAplicacion == clsVariables.eProviderNombre.MySqlClient) //Si es fecha válida hacemos filtro
                        { strValor = clsBBDD_MySQL.cFecha(Convert.ToDateTime(strValor), true).ToString(); }
                        else { strValor = ""; }
                        break;
                    case Alias_UltraWinGrid.ColumnStyle.Double:
                    case Alias_UltraWinGrid.ColumnStyle.Integer:
                        strValor = strValor.Replace("_", ""); strValor = strValor.Replace(",", ".");
                        break;
                }
                //
                //if (e.Cell.Row.Cells["ValorFiltro"].Style == Alias_UltraWinGrid.ColumnStyle.Date) // si es de tipo fecha formatear
                //{
                //   //if ( DateTime.TryParse(strValor, out DateTime Num) ==  true)
                //   if (Microsoft.VisualBasic.Information.IsDate(strValor)) //Si es fecha válida hacemos filtro
                //   { strValor = clsBBDD_MySQL.cFecha(Convert.ToDateTime(strValor), true).ToString(); }
                //   else { strValor = ""; }
                //}
                //else if
                //   (e.Cell.Row.Cells["strTipoCampo"].Value.ToString() == "double" ||
                //     e.Cell.Row.Cells["strTipoCampo"].Value.ToString() == "decimal"
                //   )//e.Cell.Row.Cells["ValorFiltro"].Style == Alias_UltraWinGrid.ColumnStyle.Double               
                //{ strValor = strValor.Replace(",", "."); }
                //

                if (string.IsNullOrWhiteSpace(strValor)) { e.Cell.Row.Cells["strWhere"].Value = ""; }
                else
                {
                    e.Cell.Row.Cells["strWhere"].Value = string.Format(e.Cell.Row.Cells["Condiciones"].Value.ToString(), strValor, null);
                }
            }
            else
            {
                e.Cell.Row.Cells["strWhere"].Value = string.Empty;
            }
            //
            //Busqueda en tiempo real
            if (bolBusquedatiempoReal && (strTituloCelda == "Filtro" || strTituloCelda == "Condiciones"))
            {
                //Dim intPosicionCursor As Integer
                //Dim oCell As UltraGridCell
                //'
                //oCell = .ActiveCell
                //intPosicionCursor = .ActiveCell.SelStart
                //Capturar el cell q tenemos activo
                AplicarFiltro();
                //.ActiveCell = oCell
                //.ActiveCell.Activate()
                //.PerformAction(UltraGridAction.EnterEditMode)
                //.ActiveCell.SelStart = intPosicionCursor
            }
            //
            //AddHandler ugFiltros.AfterCellUpdate, AddressOf ugFiltros_AfterCellUpdate
            //AddHandler ugFiltros.CellChange, AddressOf ugFiltros_AfterCellUpdate
        }
    }
    //'
    #region InitializeLayout
    //
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), ReadOnly(true)]
    private void ugFiltros_InitializeLayout(object sender, Alias_UltraWinGrid.InitializeLayoutEventArgs e)
    {
        DataRow DrNavCabecerayFiltros;
        DataTable DtNavCabecerayFiltros;
        ValueList oValueList;
        bool bolCampoTipoCombo;
        string strCampoTipo;
        //string strTipoCampo;
        //Dim strValorDefecto As String
        //Dim DrFiltros As DataRow
        //'
        try
        {
            Alias_UltraWinGrid.UltraGridBand ugridFiltros = ugFiltros.DisplayLayout.Bands[0];
            //
            Alias_UltraWinGrid.UltraGridColumn ucCampos = ugridFiltros.Columns["Campos"];
            ucCampos.Hidden = true;
            //.CellActivation = Activation.ActivateOnly
            //.SortIndicator = SortIndicator.Disabled : .CellAppearance.BackColor = Color.Khaki : .TabStop = False
            //
            Alias_UltraWinGrid.UltraGridColumn ucCamposTitulo = ugridFiltros.Columns["CamposTitulo"];
            ucCamposTitulo.Width = 150;
            ucCamposTitulo.CellActivation = Activation.ActivateOnly;
            ucCamposTitulo.SortIndicator = SortIndicator.Disabled;

            ucCamposTitulo.CellAppearance.BackColor = Color.Khaki;
            ucCamposTitulo.TabStop = false;
            //
            Alias_UltraWinGrid.UltraGridColumn ucCondiciones = ugridFiltros.Columns["Condiciones"];
            ucCondiciones.CellActivation = Activation.AllowEdit;
            ucCondiciones.Style = Alias_UltraWinGrid.ColumnStyle.DropDownList;
            ucCondiciones.ButtonDisplayStyle = Alias_UltraWinGrid.ButtonDisplayStyle.Always;
            ucCondiciones.Width = 100;
            //
            Alias_UltraWinGrid.UltraGridColumn ucValorFiltro = ugridFiltros.Columns["ValorFiltro"];
            //.Style = ColumnStyle.DropDownList
            ucValorFiltro.CellActivation = Activation.AllowEdit;
            ucValorFiltro.SortIndicator = SortIndicator.Disabled;

            ucValorFiltro.Width = 250;
            ucValorFiltro.Header.Caption = "Filtro";
            //
            Alias_UltraWinGrid.UltraGridColumn ucstrWhere = ugridFiltros.Columns["strWhere"];
            ucstrWhere.Hidden = !clsVariables.bol_Pruebas;
            ucstrWhere.Width = 300;
            //
            ugridFiltros.Columns["strTipoCampo"].Hidden = !clsVariables.bol_Pruebas; //Ocultar la columnna tipo campo
            //
            //Uso una misma sql para recuperar la cabecera y los filtros (1 acceso menos a la bbdd)
            string _strSQLCampos = String.Format(" SELECT nc.*,nf.* FROM navcabecera nc " +
                    " LEFT JOIN navfiltros nf ON nf.idnav = nc.idnav  WHERE nc.idnav ={0} Order by orden", IdNavegador);
            Console.WriteLine("DtNavCabecerayFiltros: " + _strSQLCampos); //!!Aquí obtienen rows filtros
            DtNavCabecerayFiltros = clsBBDD.DtObtener(_strSQLCampos, clsVariables.e_TipoOrigen.Sistema, false);
            //
            //El orden importa
            DrNavCabecerayFiltros = DtNavCabecerayFiltros.Rows[0];
            intFuncionalidades = (int)DrNavCabecerayFiltros["func"]; //Funcionalidades permitidas nav
            OrigenDatos = ((DrNavCabecerayFiltros["OrigenDatos"].ToString().ToLower()).ToString().IndexOf("cliente") + 1 > 0) ? clsVariables.e_TipoOrigen.Cliente : clsVariables.e_TipoOrigen.Sistema;
            ObjetoFuente = DrNavCabecerayFiltros["ObjetoFuente"].ToString();
            //
            //Funcionalidades navegador
            _bolUsuariosFechasAutomatico = clsBBDD.DevolverBooleano(DrNavCabecerayFiltros["bolUsuariosFechasAutomatico"]);
            //ugCampos.DisplayLayout.Override.AllowRowFiltering = IIf(DevolverBooleano(.Item("bolfiltroinfragistics")), _
            //                                                        DefaultableBoolean.True, DefaultableBoolean.False) 'bol_PermitirFiltrar no funciona pq. InitialiteLayout del grid se ejecuta antes
            //ugCampos.bol_PermitirFiltrar = clsBBDD.DevolverBooleano(DrNavCabecerayFiltros["bolfiltroinfragistics"]); // Antiguo método
            ugCampos.bol_PermitirFiltrar = Utiles.Enums.EnumFlagContieneValor(eFuncionalidades.PermitirFiltroGrid, intFuncionalidades);
            bolCargaAlIniciar = Utiles.Enums.EnumFlagContieneValor(eFuncionalidades.CargarAlIniciar, intFuncionalidades);
            ugCampos.bol_PermitirFijar = Utiles.Enums.EnumFlagContieneValor(eFuncionalidades.PermitirFijarGrid, intFuncionalidades);
            ugCampos.bol_PermitirAgrupar = Utiles.Enums.EnumFlagContieneValor(eFuncionalidades.PermitirAgrupacionGrid, intFuncionalidades);
            ugCampos.arrAutoCalculoCampos = DrNavCabecerayFiltros["strautocalculocampos"].ToString().Split(new string[] { "||" }, StringSplitOptions.RemoveEmptyEntries);
            bolBusquedatiempoReal = Utiles.Enums.EnumFlagContieneValor(eFuncionalidades.BusquedaTiempoReal, intFuncionalidades);
            utmMedio.Tools["ExportaraExcel"].SharedProps.Visible = Utiles.Enums.EnumFlagContieneValor(eFuncionalidades.MostrarExportExcel, intFuncionalidades); //Mostrar opción exportar Excel
            //
            //Recupera la info de los campos
            //dtDefinicionCampos = clsBBDD.DtObtener(String.Format("SELECT * FROM Campos Where tabla = \'{0}\' or tabla = \'all\'", p_ObjetoFuenteNoVista), clsVariables.e_TipoOrigen.Sistema, false);
            //
            if (!string.IsNullOrEmpty(DrNavCabecerayFiltros["idnavfiltros"].ToString())) //Si hay filtros especificados (pq. solo es el grid p.e.)
            {
                //utmMedio.Tools("Eliminar").SharedProps.Visible = True 'TODO... gestión persmisos por grupo
                //
                foreach (DataRow Dr in DtNavCabecerayFiltros.Rows) //NO se puede agregar en DT de grid directo pq. he de crear el oValueList
                {
                    //  DrFiltros = ugFiltros.DataSource.newrow
                    ugridFiltros.AddNew();
                    ugFiltros.ActiveRow.Cells["Campos"].Value = Dr["campo"]; //campos
                    ugFiltros.ActiveRow.Cells["strTipoCampo"].Value = Dr["CampoTipo"].ToString().Trim();
                    strCampoTipo = Dr["CampoTipo"].ToString().Trim();
                    bolCampoTipoCombo = (strCampoTipo == "combo"); //|| strCampoTipo =="boolean" || strCampoTipo =="bool" );
                    //----obsoleto por tbl campos
                    //try
                    //{
                    ugFiltros.ActiveRow.Cells["CamposTitulo"].Value = clsVariables.RetCamposDescripcion(Dr["campo"].ToString()); //De momento nombre campo como título
                    //   //
                    //   //if (!string.IsNullOrEmpty(Dr["campotitulopersonal"].ToString()))
                    //   //{
                    //   //   ugFiltros.ActiveRow.Cells["CamposTitulo"].Value = Dr["campotitulopersonal"]; //Si tiene título personalizado se lo pongo
                    //   //}
                    //   //else
                    //   //{
                    //   //   //DataRow[] Dr2 =  dtDefinicionCampos.Select(string.Format("campo = \'{0}\'", Dr["campo"].ToString()));
                    //   //   ugFiltros.ActiveRow.Cells["CamposTitulo"].Value = clsVariables.RetCamposDescripcion(Dr["campo"].ToString());// Dr2[0]["descripcion"]; //Si el campo es tipo combo coge la descripcion de combovalue y no campo
                    //   //}
                    //   //
                    //}
                    //catch (Exception) //NO hay info de este campo o dtdefinicion vale nothing
                    //{
                    //}
                    //----obsoleto por tbl campos
                    //
                    // !! Style de la celda en grid filtros según tipo campo y carga combos
                    oValueList = AccionesSegunTipoCampo(strCampoTipo); //!!Según el tipo de campo condiciones
                    ugFiltros.ActiveRow.Cells["Condiciones"].ValueList = oValueList;

                    //Buscar el valor por defecto en la lista creada (text).. si encuentra escoger sino escoger 1er elemento
                    ugFiltros.ActiveRow.Cells["Condiciones"].Value = oValueList.ValueListItems[0].DataValue; //Primera opción por defecto 'oValueList.SelectedIndex = 0:... SC: desfasado. Susituido por campo filtroinicial
                    string _strFiltroForzado = Dr["condicionforzada"] == null ? "" : Dr["condicionforzada"].ToString();
                    if (!string.IsNullOrWhiteSpace(_strFiltroForzado))
                    {
                        foreach (ValueListItem _ValueListItem in oValueList.ValueListItems)
                        {
                            if (_ValueListItem.DisplayText == _strFiltroForzado)
                            {
                                ugFiltros.ActiveRow.Cells["Condiciones"].Value = _ValueListItem.DataValue; break;
                            }
                        }
                    }

                    //Valor defecto filtro
                    if (!string.IsNullOrEmpty(Utiles.General.ScpIsNull(Dr["valordefecto"], string.Empty).ToString()))
                    {
                        ugFiltros.ActiveRow.Cells["ValorFiltro"].Value = Dr["valordefecto"]; //Puede ser número o otro
                        ugFiltros.ActiveRow.Cells["strWhere"].Value = string.Format(ugFiltros.ActiveRow.Cells["Condiciones"].Value.ToString(),
                                                                                                   Dr["valordefecto"].ToString()); //.Cells("Condiciones").Value = '={0}' por ejemplo
                    }
                    ugFiltros.ActiveRow.Cells["ValorFiltro"].Activation = (clsBBDD.DevolverBooleano(Dr["valordefectomodificable"])) ? Activation.AllowEdit : Activation.ActivateOnly;
                    //              
                    //else if (strTipoCampo == "decimal" || strTipoCampo == "double")
                    //{ ugFiltros.ActiveRow.Cells["ValorFiltro"].Style = Alias_UltraWinGrid.ColumnStyle.Double; } //Luego coge el text de lka celda y la caga
                    //
                    if (bolCampoTipoCombo)
                    {
                        ugFiltros.ActiveRow.Cells["ValorFiltro"].ValueList = AgregarValueListTipoCombo(Dr);
                        //ugFiltros.ActiveRow.Cells["ValorFiltro"].ValueList.SortByValue = false;
                        ugFiltros.ActiveRow.Cells["ValorFiltro"].Style = Alias_UltraWinGrid.ColumnStyle.DropDownList;
                    }
                    //
                    ugFiltros.ActiveRow.Hidden = !clsBBDD.DevolverBooleano(Dr["visible"]);
                }
                //
            }
            else
            {

            }
            //
            if (bolCargaAlIniciar)
            {
                AplicarFiltro(); //Carga automática
            }
            //'
        }
        catch (Exception ex)
        {
            Utiles.Errores.LanzarError(this, "ugFiltros_InitializeLayout", "Error al cargar nav filtros ", ex, MessageBoxIcon.Exclamation, true);
        }
    }
    //'
    /// <summary>
    /// Aplicar el formato cuando se le cargan datos
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    /// <remarks></remarks>
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), ReadOnly(true)]
    private void ugCampos_InitializeLayout(object sender, Alias_UltraWinGrid.InitializeLayoutEventArgs e)
    {
        bool bol_TipoDatosNumerico = false;
        DataTable DtNavCampos;
        DataRow DrCampos;
        string strCampoActual = string.Empty;
        int intAnchoColumna;
        int intOrdenColumnas = 0;
        //'
        //
        try
        {
            //'Recuperar los campos que ha de mostrar conjuntamente con la definición de cada uno de ellos.. 'TODO. En BackGround
            //DtNavCampos = DtObtener(" SELECT nc.*,c.*,ncb.objetofuente FROM navcampos nc " & _
            //                        " LEFT JOIN campos c ON c.campo = nc.campo And c.tabla =  " & _
            //                        " LEFT JOIN navcabecera ncb ON ncb.idnav = nc.idnav " & _
            //                        " WHERE idnav =" & IdNavegador & _
            //                        " AND c.tabla = '" & p_ObjetoFuente & "' ORDER BY nc.ordengrid ", e_TipoOrigen.Sistema)  'Cargar Detalle Navegador
            string strSQlCampos = String.Format(" SELECT nc.* FROM navcampos nc WHERE idnav ={0} ORDER BY nc.ordengrid ", IdNavegador);  //Tiene q tener el OrderBy para que haga ok el orden
            Console.WriteLine("strCampos: " + strSQlCampos);        //!!Aquí carga DtNavCampos, los campos q ha de mostrar el grid y no todos       
            DtNavCampos = clsBBDD.DtObtener(strSQlCampos, clsVariables.e_TipoOrigen.Sistema, false); //Cargar Detalle Navegador

            //
            //Ocultar todas las columnas
            Alias_UltraWinGrid.UltraGridBand ugCampoBanda0 = ugCampos.DisplayLayout.Bands[0];
            //
            foreach (UltraGridColumn ugC in ugCampoBanda0.Columns)
            {
                ugC.Hidden = true;
            }
            //
            //Formato por cada columna
            foreach (DataRow Dr in DtNavCampos.Rows)
            {
                strCampoActual = Dr["campo"].ToString();
                Console.WriteLine("<ugCampos_InitializeLayout> Campo actual: " + strCampoActual);
                Alias_UltraWinGrid.UltraGridColumn ugBandsColumnaActual = ugCampoBanda0.Columns[strCampoActual];
                bol_TipoDatosNumerico = false;
                //
                //Aprovecho y hago lo específico por columna
                switch (ugBandsColumnaActual.DataType.Name.ToUpper())
                {
                    case "INTEGER":
                    case "SHORT":
                    case "LONG":
                    case "BYTE":
                    case "SINGLE":
                        ugBandsColumnaActual.CellAppearance.TextHAlign = HAlign.Right;
                        bol_TipoDatosNumerico = true;
                        break;
                    case "DOUBLE":
                    case "DECIMAL":
                        ugBandsColumnaActual.CellAppearance.TextHAlign = HAlign.Right;
                        ugBandsColumnaActual.Format = "##,##0.00"; // : .MaskInput = "##,##"
                        bol_TipoDatosNumerico = true;
                        ugBandsColumnaActual.Style = Alias_UltraWinGrid.ColumnStyle.Double;
                        break;
                    case "BOOLEAN":
                    case "SBYTE":
                        ugBandsColumnaActual.Style = Alias_UltraWinGrid.ColumnStyle.CheckBox;
                        break;
                    case "DATETIME":
                        ugBandsColumnaActual.MaskInput = "dd/mm/yy hh:mm:ss";
                        break;
                    case "DATE":
                        ugBandsColumnaActual.MaskInput = "dd/mm/yy";
                        break;
                    case "TIME":
                        ugBandsColumnaActual.MaskInput = "hh:mm:ss tt";
                        break;
                    case "STRING":
                        break;
                }
                //
                ugBandsColumnaActual.Hidden = !clsBBDD.DevolverBooleano(Dr["visualizar"]);
                //
                if (!ugBandsColumnaActual.Hidden) //Solo trato los visibles
                {
                    try
                    {
                        ugBandsColumnaActual.Header.Caption = System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(Dr["campo"].ToString().Replace("_", " ")); //De momento nombre campo como título
                        DrCampos = clsVariables.RetCamposRow(Dr["campo"].ToString()); // dtDefinicionCampos.Select(string.Format("campo = \'{0}\'", Dr["campo"]))[0];
                        //Si encuentra DrCampos
                        intAnchoColumna = (int)Utiles.General.ScpIsNull(DrCampos["longitudvisualizar"], ugBandsColumnaActual.Width);
                        ugBandsColumnaActual.Width = intAnchoColumna != 0 ? intAnchoColumna : ugBandsColumnaActual.Width; //sino tiene ancho asignado le deja el que tenía
                        ugBandsColumnaActual.Header.Caption = DrCampos["descripcion"].ToString();
                    }
                    catch (Exception) //NO hay info de este campo o dtdefinicion vale nothing
                    {
                    }
                    //.Header.Caption = General.ScpIsNull(Dr("descripcion"), .Header.Caption) 'Sino encuentra descripción le deja el título del dt
                    //
                    //Orden columnas (no posición)
                    if (bol_TipoDatosNumerico)
                    {
                        ugBandsColumnaActual.SortComparer = new Utiles.UtilInfragistics.Ctrl_UltraGrid.srtComparer(ugBandsColumnaActual.Key);
                    }
                    //
                    //Si no hay orden esto no hace falta. 100 es el valor por defecto para conservar la posición de las columnas
                    if (!string.IsNullOrEmpty(Dr["ordengrid"].ToString()) && (int)Dr["ordengrid"] != 0 && (int)Dr["ordengrid"] != 100)
                    {
                        ugBandsColumnaActual.SortIndicator = (clsBBDD.DevolverBooleano(Dr["ordendescendente"])) ? SortIndicator.Descending : SortIndicator.Ascending;
                    }
                    //
                    //.Band.SortedColumns.RefreshSort(True) 'Refrescar orden grid 'Hará falta
                    //
                    //if ((int)Utiles.General.ScpIsNull(Dr["posicioncolumnas"], 0) != 0)
                    //{
                    //    ugBandsColumnaActual.Header.VisiblePosition = (int)Dr["posicioncolumnas"]; //Posición
                    //}
                    //ugCampos.DisplayLayout.Bands[0].Columns["nombre"].Header.VisiblePosition = 2;
                    //if (ugCampos.arrAutoCalculoCampos.Length > 0)
                    //{
                    //   foreach (string strOperacion in ugCampos.arrAutoCalculoCampos)
                    //   {
                    //      switch (strOperacion.ToLower().Substring(0, 2))
                    //      {
                    //         //case "red":    r++;    break; 
                    //         // su:suma, av:average, mi:minim, ma:maxim, co:count //NOTA: Está en el ccontrol del grid
                    //         case "su": UtilInfragistics.Ctrl_UltraGrid.AgregarQuitarCalculoColumna(ugCampos, strOperacion, SummaryType.Sum);
                    //         case "av": ugCampoBanda0.Columns[strOperacion].AllowRowSummaries = AllowRowSummaries.True;
                    //         case "mi": ugCampoBanda0.Columns[strOperacion].AllowRowSummaries = AllowRowSummaries.True;
                    //         case "ma": ugCampoBanda0.Columns[strOperacion].AllowRowSummaries = AllowRowSummaries.True;
                    //         case "co": ugCampoBanda0.Columns[strOperacion].AllowRowSummaries = AllowRowSummaries.True;
                    //         default: break;
                    //      }

                    //   }
                    //}
                    ugBandsColumnaActual.Header.FixedHeaderIndicator = (Convert.ToBoolean(Dr["fijar"])) ? FixedHeaderIndicator.Button : FixedHeaderIndicator.None; //Mostrar fijar columnas
                } //If Not .Hidden Then 'Solo trato los visibles
                //
                //
            }
            //
            //ORden de las columnas en el grid
            DataView dv = DtNavCampos.DefaultView;
            dv.Sort = "posicioncolumnas";
            foreach (DataRow Dr in dv.ToTable().Rows)
            {
                intOrdenColumnas += 1;
                ugCampos.DisplayLayout.Bands[0].Columns[Dr["campo"].ToString()].Header.VisiblePosition = intOrdenColumnas;
            }
            //
            //Columna eliminar
            Alias_UltraWinGrid.UltraGridColumn ugcSeleccionar = ugCampoBanda0.Columns["Seleccionar"];
            //ugcSeleccionar.Header.FixedHeaderIndicator = FixedHeaderIndicator.Button;
            //ugcSeleccionar.Header.Fixed = true;
            //.Style = ColumnStyle.CheckBox ....'Todo esto en el primer initialytelayout
            //.Header.VisiblePosition = 0
            ugcSeleccionar.Hidden = !utmMedio.Tools["Eliminar"].SharedProps.Visible; //Mostra eliminar
            ugcSeleccionar.Width = 90;
            //ugcSeleccionar.Header.Fixed = true; //Ya lo hace en Ctrl_UltraGrid_InitializeLayout
            //.Header.Fixed = True '.FixedHeaderIndicator = FixedHeaderIndicator.Default
            //.CellClickAction = CellClickAction.Edit
            //.CellAppearance.BackColor = Color.Khaki
            //.DefaultCellValue = 0
            //
            //Columnas usuarios y fechas
            //If _bolUsuariosFechasAutomatico Then
            if (ugCampoBanda0.Columns.Exists("NombreUsuarioCreador"))
            {
                Alias_UltraWinGrid.UltraGridColumn with_5 = ugCampoBanda0.Columns["NombreUsuarioCreador"];
                with_5.Header.Caption = "Usuario Creador";

                with_5.Hidden = false;
                with_5.Header.VisiblePosition = 1000;
            }
            if (ugCampoBanda0.Columns.Exists("fechac"))
            {
                Alias_UltraWinGrid.UltraGridColumn with_6 = ugCampoBanda0.Columns["fechac"];
                with_6.Header.Caption = "Fecha Creación";

                with_6.Hidden = false;
                with_6.Header.VisiblePosition = 1001;
            }
            if (ugCampoBanda0.Columns.Exists("NombreUsuarioModificador"))
            {
                Alias_UltraWinGrid.UltraGridColumn with_7 = ugCampoBanda0.Columns["NombreUsuarioModificador"];
                with_7.Header.Caption = "Usuario Modificador";

                with_7.Hidden = false;
                with_7.Header.VisiblePosition = 1002;
            }
            if (ugCampoBanda0.Columns.Exists("fecham"))
            {
                Alias_UltraWinGrid.UltraGridColumn with_8 = ugCampoBanda0.Columns["fecham"];
                with_8.Header.Caption = "Fecha Modificación";

                with_8.Hidden = false;
                with_8.Header.VisiblePosition = 1003;
            }
            //End If
            //
        }
        catch (Exception ex)
        {
            Utiles.Errores.LanzarError(this, "ugCampos_InitializeLayout", "Error al cargar nav campos. Campo actual: " + strCampoActual, ex, MessageBoxIcon.Exclamation, true);
        }
    }
    //'
    #endregion
    //'
    ~navBase()
    {
        base.Dispose();
        ugCampos = null; ugFiltros = null; frmMantenimiento = null; rptNavegador = null;// dtDefinicionCampos = null;
    }
    //
    private void ugCampos_BeforeRowActivate(object sender, Alias_UltraWinGrid.RowEventArgs e)
    {
        Infragistics.Win.UltraWinToolbars.ToolBase toolEliminar;
        //
        RegistroActual = e.Row.Index + 1;
        toolEliminar = utmMedio.Tools["Eliminar"];
        toolEliminar.SharedProps.Enabled = bolBorrar;
        try
        {
            if (bolBorrar)
            {
                toolEliminar.SharedProps.Enabled =
                !clsBBDD.DevolverBooleano(((DataRowView)(e.Row.ListObject)).Row["bolnoborrable"]);
            }
        }
        catch (Exception) { }  //throw;} Si hay error no hacer nada... puede q no tenga la columna 
    }
    //'
    //'
    /// <summary>
    /// Tratamiento de algunos mensajes de error del mto según dataprovider
    /// </summary>
    /// <param name="e"></param>
    /// <param name="Err"></param>
    private void TrataErroresGenericos(System.ComponentModel.CancelEventArgs e, Exception Err)
    {
        string strNuevoError = "";
        string strErr = Err.Message.ToString().Trim().ToLower();
        //
        switch (clsVariables.e_ProviderNombreAplicacion)
        {
            case clsVariables.eProviderNombre.Ninguno:
                break;
            case clsVariables.eProviderNombre.Odbc:
                break;
            case clsVariables.eProviderNombre.OleDb:
                break;
            case clsVariables.eProviderNombre.OracleClient:
                break;
            case clsVariables.eProviderNombre.SqlClient:
                break;
            case clsVariables.eProviderNombre.SqlServerCe:
                break;
            case clsVariables.eProviderNombre.SqlServerCe35:
                break;
            case clsVariables.eProviderNombre.OracleDataAccessClient:
                break;
            case clsVariables.eProviderNombre.MySqlClient:
                switch (((MySql.Data.MySqlClient.MySqlException)Err).Number)
                {
                    case 1451: strNuevoError = "No se puede eliminar el registro porque es el padre de una tabla hija." +
                        " Elimine los registros hijos antes de eliminar el padre. ";
                        if (clsVariables.bol_Pruebas)
                        { strNuevoError += Environment.NewLine + "Detalle error: " + Err.ToString(); } break;
                    default: strNuevoError = Err.Message; break;
                }
                break;
            default: break;
        }
        //
        if (e == null || e.Cancel == true)
        {
            Utiles.Errores.LanzarError(this, "Navegador",
                String.Format("{0}{1}No se continuará la acción.", strNuevoError, Environment.NewLine), null, MessageBoxIcon.Exclamation);
        }

    }
}

